#ifndef OCMAPMERGE_H_INCLUDED
#define OCMAPMERGE_H_INCLUDED

#include "octaskrange.h"

//typedef struct _oc_map_merge_t oc_map_merge_t;

//struct _oc_map_merge_t;


/*
* The split function is defined by user.
* It can be either serial or parallel.
* In reference to current design, user has
* to implement each of them if needed.
**/
typedef void ( * oc_split_usr_func_t ) ( void *input_data,
                                        oc_task_range_t   *task_range
                                        );

typedef void ( * oc_map_usr_func_t ) (  void *mkey,
                                        void *mvalue );

typedef void ( * oc_reduce_usr_func_t ) (   void *rvalue_src,
                                            void *rvalue_dest );

typedef guint ( * oc_rkey_hash_func_t ) ( gconstpointer key );
typedef gint ( * oc_rkey_cmp_func_t ) ( gconstpointer rk0,
                                        gconstpointer rk1 );
typedef gpointer ( * oc_rkey_new_func_t ) ( );
typedef gpointer ( * oc_rvalue_new_func_t ) ( );
typedef void ( * oc_rkey_destroy_func_t ) ( gpointer rkey );
typedef void ( * oc_rvalue_destroy_func_t ) ( gpointer rvalue );


#endif // OCMAPMERGE_H_INCLUDED
